package com.rbac.admin.service.system;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.rbac.admin.entity.system.SystemRole;
import com.rbac.admin.vo.system.RoleVO;

import java.util.List;

/**
 * 角色服务接口
 *
 * @author rbac-admin
 * @since 2024-07-18
 */
public interface RoleService extends IService<SystemRole> {

    /**
     * 根据用户ID查询角色列表
     *
     * @param userId 用户ID
     * @return 角色列表
     */
    List<SystemRole> getRolesByUserId(String userId);

    /**
     * 根据角色编码查询角色
     *
     * @param code 角色编码
     * @return 角色信息
     */
    SystemRole getRoleByCode(String code);
    
    /**
     * 分页查询角色列表
     *
     * @param page 分页参数
     * @param role 查询条件
     * @return 角色列表
     */
    IPage<RoleVO> getRolePage(Page<RoleVO> page, SystemRole role);
    
    /**
     * 获取角色详情
     *
     * @param roleId 角色ID
     * @return 角色详情
     */
    RoleVO getRoleById(String roleId);
    
    /**
     * 获取所有活跃状态的角色
     *
     * @return 角色列表
     */
    List<RoleVO> getAllActiveRoles();
    
    /**
     * 检查角色编码是否存在
     *
     * @param roleCode 角色编码
     * @param excludeRoleId 排除的角色ID
     * @return 是否存在
     */
    boolean checkRoleCodeExists(String roleCode, String excludeRoleId);
    
    /**
     * 检查角色名称是否存在
     *
     * @param roleName 角色名称
     * @param excludeRoleId 排除的角色ID
     * @return 是否存在
     */
    boolean checkRoleNameExists(String roleName, String excludeRoleId);
    
    /**
     * 检查角色是否有关联用户
     *
     * @param roleId 角色ID
     * @return 是否有关联用户
     */
    boolean hasAssociatedUsers(String roleId);
} 